#ifndef FM_H_
#define FM_H_

/// FM (RX and TX) block

#include "Generic/Peripheral/Peripheral.h"

/// Registers definition
enum
{
    REG_FMM_FIFO_APERTURE, // 0X000F2000
    REG_FMM_FIFO_APER_END = 0x1FC/4, // 0X000F21FC
    REG_FMM_FIFO_STATUS, // 0X000F2200
    REG_FMM_FIFO_RD_UPDATE = REG_FMM_FIFO_STATUS, // 0X000F2200
    REG_FMM_FIFO_SIZE, // 0X000F2204
    REG_FMM_FIFO_BASE, // 0X000F2208
    REG_FMM_FIFO_WATERLINE, // 0X000F220C
    REG_FMM_FIFO_WR_UPDATE, // 0X000F2210
    REG_FMM_FIFO2_RD_UPDATE, // 0X000F2214
    REG_FM_RDS_SYSTEM = 0x2000/4, // 0X000F4000
    REG_FM_CTRL, // 0X000F4004
    REG_FM_RDS_CTRL0, // 0X000F4008
    REG_FM_RDS_CTRL1, // 0X000F400C
    REG_FM_AUDIO_PAUSE, // 0X000F4010
    REG_FM_AUDIO_CTRL0, // 0X000F4014
    REG_FM_AUDIO_CTRL1, // 0X000F4018
    REG_FM_SEARCH_CTRL0, // 0X000F401C
    REG_FM_SEARCH_CTRL1, // 0X000F4020
    REG_FM_SEARCH_TUNE_MODE, // 0X000F4024
    REG_FM_FREQ0, // 0X000F4028
    REG_FM_FREQ1, // 0X000F402C
    REG_FM_AF_FREQ0, // 0X000F4030
    REG_FM_AF_FREQ1, // 0X000F4034
    REG_FM_CARRIER, // 0X000F4038
    REG_FM_RSSI, // 0X000F403C
    REG_FM_MASK, // 0X000F4040
    REG_FM_RDS_MASK, // 0X000F4044
    REG_FM_FLAG, // 0X000F4048
    REG_FM_RDS_FLAG, // 0X000F404C
    REG_FM_RDS_WLINE, // 0X000F4050
    REG_FM_RDS_FIFO_SIZE, // 0X000F4054
    REG_FM_RDS_BLKB_MATCH0, // 0X000F4058
    REG_FM_RDS_BLKB_MATCH1, // 0X000F405C
    REG_FM_RDS_BLKB_MASK0, // 0X000F4060
    REG_FM_RDS_BLKB_MASK1, // 0X000F4064
    REG_FM_RDS_PI_MATCH0, // 0X000F4068
    REG_FM_RDS_PI_MATCH1, // 0X000F406C
    REG_FM_RDS_PI_MASK0, // 0X000F4070
    REG_FM_RDS_PI_MASK1, // 0X000F4074
    REG_FM_RDS_BOOT, // 0X000F4078
    REG_FM_RDS_TEST, // 0X000F407C
    REG_FM_API_SPARE0, // 0X000F4080
    REG_FM_API_SPARE1, // 0X000F4084
    REG_FM_I2C_WRITE_STAT0, // 0X000F4088
    REG_FM_I2C_WRITE_STAT1, // 0X000F408C
    REG_FM_I2C_WRITE_MASK0, // 0X000F4090
    REG_FM_I2C_WRITE_MASK1, // 0X000F4094
    REG_FM_IRQ_TRIG_CTRL, // 0X000F4098
    REG_FM_INTERF_DET, // 0X000F409C
    REG_MTU_REVID, // 0X000F40A0
    REG_MTU_I2C_SLAVE_ADDR, // 0X000F40A4
    REG_MTU_I2S_CTL, // 0X000F40A8
    REG_LMX1600_UWIRE, // 0X000F40AC
    REG_FM_MASK_SHADOW, // 0X000F40B0
    REG_FM_RDS_MASK_SHADOW, // 0X000F40B4
    REG_FM_FLAG_SHADOW, // 0X000F40B8
    REG_FM_RDS_FLAG_SHADOW, // 0X000F40BC
    REG_FM_DPATH_CTRL0, // 0X000F40C0
    REG_FM_PLLC1, // 0X000F40C4
    REG_FM_PLLC2, // 0X000F40C8
    REG_FM_MPXPLLC1_LOW, // 0X000F40CC
    REG_FM_MPXPLLC2_LOW, // 0X000F40D0
    REG_FM_MPXPLLC1_HIGH, // 0X000F40D4
    REG_FM_MPXPLLC2_HIGH, // 0X000F40D8
    REG_FM_ADC_CM_OP, // 0X000F40DC
    REG_FM_JKS_SPARE1, // 0X000F40E0
    REG_FM_JKS_SPARE2, // 0X000F40E4
    REG_FM_JKS_SPARE3, // 0X000F40E8
    REG_FM_BPF_RC, // 0X000F40EC
    REG_FM_AGC_GAIN = 0x20F8/4, // 0X000F40F8
    REG_FM_ADC_RSSI, // 0X000F40FC
    REG_FM_MPXOFFSET0 = 0x2104/4, // 0X000F4104
    REG_FM_MPXOFFSET1, // 0X000F4108
    REG_FM_MPXOFFSET2, // 0X000F410C
    REG_FM_MPXPLLDELTA0, // 0X000F4110
    REG_FM_MPXPLLDELTA1, // 0X000F4114
    REG_FM_MPXPLLDELTA2, // 0X000F4118
    REG_FM_MPXRDSDELTA0, // 0X000F411C
    REG_FM_MPXRDSDELTA1, // 0X000F4120
    REG_FM_MPXRDSDELTA2, // 0X000F4124
    REG_FM_CRAMAD, // 0X000F4128
    REG_FM_CRAMBO, // 0X000F412C
    REG_FM_CRAMD, // 0X000F4130
    REG_FM_DPATH_CTRL1, // 0X000F4134
    REG_FM_RAM_CLR_REQ, // 0X000F4138
    REG_FM_RAM_CLR_STAT, // 0X000F413C
    REG_FM_STAND_OFF0, // 0X000F4140
    REG_FM_STAND_OFF1, // 0X000F4144
    REG_FM_DEROTDELTA0, // 0X000F4148
    REG_FM_DEROTDELTA1, // 0X000F414C
    REG_FM_DEROTDELTA2, // 0X000F4150
    REG_FM_IRQ_MODE0, // 0X000F4154
    REG_FM_IRQ_MODE1, // 0X000F4158
    REG_FM_IRQ_MODE2, // 0X000F415C
    REG_FM_IRQ_MODE3, // 0X000F4160
    REG_FM_RDS_K, // 0X000F4164
    REG_FM_RDS_M, // 0X000F4168
    REG_FM_RDS_N, // 0X000F416C
    REG_FM_RDS_THRESH0, // 0X000F4170
    REG_FM_RDS_THRESH1, // 0X000F4174
    REG_FM_AUDINTERP_CTRL, // 0X000F4178
    REG_FM_MPX_MUX_CTRL, // 0X000F417C
    REG_FM_STEREO_MONO_CTL, // 0X000F4180
    REG_FM_STEREO_MONO_OVR_VAL0, // 0X000F4184
    REG_FM_STEREO_MONO_OVR_VAL1, // 0X000F4188
    REG_FM_BLEND_THLD, // 0X000F418C
    REG_FM_BLEND_STRATA0, // 0X000F4190
    REG_FM_BLEND_STRATA1, // 0X000F4194
    REG_FM_BLEND_STRATA2, // 0X000F4198
    REG_FM_BLEND_STRATA3, // 0X000F419C
    REG_FM_BLEND_STRATA4, // 0X000F41A0
    REG_FM_BLEND_STRATA5, // 0X000F41A4
    REG_FM_BLEND_STRATA6, // 0X000F41A8
    REG_FM_BLEND_STRATA7, // 0X000F41AC
    REG_FM_SW_STEREO_THLD, // 0X000F41B0
    REG_FM_SW_MONO_THLD, // 0X000F41B4
    REG_FM_SW_CNT0, // 0X000F41B8
    REG_FM_SW_CNT1, // 0X000F41BC
    REG_FM_MUTE_CTRL, // 0X000F41C0
    REG_FM_MUTE_LR_CNT0, // 0X000F41C4
    REG_FM_MUTE_LR_CNT1, // 0X000F41C8
    REG_FM_MUTE_LEFT_OVR_VAL0, // 0X000F41CC
    REG_FM_MUTE_LEFT_OVR_VAL1, // 0X000F41D0
    REG_FM_MUTE_RIGHT_OVR_VAL0, // 0X000F41D4
    REG_FM_MUTE_RIGHT_OVR_VAL1, // 0X000F41D8
    REG_FM_MUTE_SOFT_THLD, // 0X000F41DC
    REG_FM_MUTE_SOFT_OVR_VAL0, // 0X000F41E0
    REG_FM_MUTE_SOFT_OVR_VAL1, // 0X000F41E4
    REG_FM_RTA_CTRL, // 0X000F41E8
    REG_FM_RTA_INITDECIM, // 0X000F41EC
    REG_FM_RTA_MINTRKSTEP, // 0X000F41F0
    REG_FM_AUD_PREC_INTF, // 0X000F41F4
    REG_FM_DEBUG_CTRL, // 0X000F41F8
    REG_FM_RDS_RDATA = 0x2200/4, // 0X000F4200
    REG_FM_RSSI_CTRL0, // 0X000F4204
    REG_FM_RSSI_CTRL1, // 0X000F4208
    REG_FM_AGCRAMAD, // 0X000F420C
    REG_FM_AGCRAMBO, // 0X000F4210
    REG_FM_AGCRAMD, // 0X000F4214
    REG_FM_TARGETRSSI, // 0X000F4218
    REG_FM_AGC_CTRL0, // 0X000F421C
    REG_FM_AGC_CTRL1, // 0X000F4220
    REG_FM_AGCSWITCHLIM, // 0X000F4224
    REG_FM_AGCTHRESHHL, // 0X000F4228
    REG_FM_WRSSI_CTRL0, // 0X000F422C
    REG_FM_WRSSI_CTRL1, // 0X000F4230
    REG_FM_WRSSI_CTRL2, // 0X000F4234
    REG_FM_LNA_RSSI_THRESH, // 0X000F4238
    REG_FM_AGC_OVR_VAL0, // 0X000F423C
    REG_FM_AGC_OVR_VAL1, // 0X000F4240
    REG_FM_DCOFF_CTRL0, // 0X000F4244
    REG_FM_DCOFF_CTRL1, // 0X000F4248
    REG_FM_DCOFF_CTRL2, // 0X000F424C
    REG_FM_RDS_DEMOD_CTRL0, // 0X000F4250
    REG_FM_RDS_DEMOD_CTRL1, // 0X000F4254
    REG_FM_PILOT_DETECT_CTRL0, // 0X000F4258
    REG_FM_PILOT_TONE_THRESH, // 0X000F425C
    REG_FM_PILOT_LOCK_THRESH, // 0X000F4260
    REG_FM_PILOT_LOCK_CNT, // 0X000F4264
    REG_FM_PILOT_TONE_DIFF_CNT, // 0X000F4268
    REG_FM_AUDIO_PAUSE_CTRL0, // 0X000F426C
    REG_FM_AUDIO_PAUSE_MAX_LVL0, // 0X000F4270
    REG_FM_AUDIO_PAUSE_MAX_LVL1, // 0X000F4274
    REG_FM_AUDIO_PAUSE_TIMER0, // 0X000F4278
    REG_FM_AUDIO_PAUSE_TIMER1, // 0X000F427C
    REG_FM_AUDIO_ACTIVE_LVL0, // 0X000F4280
    REG_FM_AUDIO_ACTIVE_LVL1, // 0X000F4284
    REG_FM_AUDIO_ACTIVE_TIMER0, // 0X000F4288
    REG_FM_AUDIO_ACTIVE_TIMER1, // 0X000F428C
    REG_FM_AUDIO_MAG_FILT0, // 0X000F4290
    REG_FM_AUDIO_MAG_FILT1, // 0X000F4294
    REG_FM_RDS_AGC_CTRL0, // 0X000F4298
    REG_FM_RDS_AGC_CTRL1, // 0X000F429C
    REG_FM_RDS_AGC_CTRL2, // 0X000F42A0
    REG_FM_RDS_AGC_CTRL3, // 0X000F42A4
    REG_FM_RDS_AGC_CTRL4, // 0X000F42A8
    REG_FM_I2C_PAGE_CTRL, // 0X000F42AC
    REG_RF_IF_CTRL = 0x22C0/4, // 0X000F42C0
    REG_RF_CAL_SET_COUNT1, // 0X000F42C4
    REG_RF_CAL_SET_COUNT0, // 0X000F42C8
    REG_RF_CLK12P288_DIV, // 0X000F42CC
    REG_RF_WILD_BASE2, // 0X000F42D0
    REG_RF_WILD_BASE1, // 0X000F42D4
    REG_RF_WILD_BASE0, // 0X000F42D8
    REG_RF_LF_VCTRL_LVL, // 0X000F42DC
    REG_RF_XTAL_DIV1, // 0X000F42E0
    REG_RF_XTAL_DIV0, // 0X000F42E4
    REG_RF_BLK_AND_RST, // 0X000F42E8
    REG_FM_ANA_VDAC_CTRL = 0x2300/4, // 0X000F4300
    REG_FM_ANA_VDRV1_CTRL, // 0X000F4304
    REG_FM_ANA_VDRV2_CTRL, // 0X000F4308
    REG_RF_FM_SPARE3 = 0x2338/4, // 0X000F4338
    REG_RF_FM_SPARE4, // 0X000F433C
    REG_RF_ADC_TR, // 0X000F4340
    REG_RF_ADC_OP_QT_TR, // 0X000F4344
    REG_RF_ADC_RC_CKDEL, // 0X000F4348
    REG_RF_BPFADC_BG_RCTC_RCAL, // 0X000F434C
    REG_RF_BPF_CF_RC_TR, // 0X000F4350
    REG_RF_IDIV_IOFF, // 0X000F4354
    REG_RF_LOBUF_IDAC_C_LF, // 0X000F4358
    REG_RF_CAL_REF_TIMEOUT, // 0X000F435C
    REG_RF_DELACL, // 0X000F4360
    REG_RF_DELAOL, // 0X000F4364
    REG_RF_DELARF, // 0X000F4368
    REG_RF_DELBOL, // 0X000F436C
    REG_RF_FORCE_CAPS1, // 0X000F4370
    REG_RF_FORCE_CAPS0, // 0X000F4374
    REG_RF_LNA_MX_BGB_IDACTR, // 0X000F4378
    REG_RF_LNA_MX_BG_RCTCTR, // 0X000F437C
    REG_RF_KPD_SCL_DIV2_I, // 0X000F4380
    REG_RF_FRACT_N_CTRL0, // 0X000F4384
    REG_RF_PD_OVR_VAL2, // 0X000F4388
    REG_RF_PD_OVR_VAL1, // 0X000F438C
    REG_RF_PD_OVR_VAL0, // 0X000F4390
    REG_RF_PD_OVR2, // 0X000F4394
    REG_RF_PD_OVR1, // 0X000F4398
    REG_RF_PD_OVR0, // 0X000F439C
    REG_RF_PLL_BG_RCTCB, // 0X000F43A0
    REG_RF_PLL_BG_TR, // 0X000F43A4
    REG_RF_VCO_BG_RCTCTR, // 0X000F43A8
    REG_RF_LNA_MODE, // 0X000F43AC
    REG_RF_READ_CAP_CAL1, // 0X000F43B0
    REG_RF_READ_CAP_CAL0, // 0X000F43B4
    REG_RF_XTALCORE_BUF, // 0X000F43B8
    REG_RF_WRSSI_OPQT_TR, // 0X000F43BC
    REG_RF_ADC_GC_IRLAD, // 0X000F43C0
    REG_RF_WRSSI_RCAL, // 0X000F43C4
    REG_RF_VCO_CAL_MISC, // 0X000F43C8
    REG_RF_IVCO_KVCO, // 0X000F43CC
    REG_RF_FM_SPARE0, // 0X000F43D0
    REG_RF_PHASE_CNT, // 0X000F43D4
    REG_RF_FM_SPARE2, // 0X000F43D8
    REG_RF_FM_PLL_VCO_MISC, // 0X000F43DC
    REG_RF_FM_IVCO, // 0X000F43E0
    REG_RF_FMTX_ICP, // 0X000F43E4
    REG_RF_PMU_CLK_DIV, // 0X000F43E8
    REG_RF_FMTX_PA_CTRL0, // 0X000F43EC
    REG_RF_FMTX_PA_CTRL1, // 0X000F43F0
    REG_RF_FMTX_SPARE0, // 0X000F43F4
    REG_RF_FMTX_SPARE1, // 0X000F43F8
    REG_RF_FMTX_SPARE2, // 0X000F43FC
    REG_FMTX_AGC_HITARG0, // 0X000F4400
    REG_FMTX_AGC_HITARG1, // 0X000F4404
    REG_FMTX_AGC_LOTARG0, // 0X000F4408
    REG_FMTX_AGC_LOTARG1, // 0X000F440C
    REG_FMTX_TG_CTRL, // 0X000F4410
    REG_FMTX_AGC_THRESH0, // 0X000F4414
    REG_FMTX_AGC_THRESH1, // 0X000F4418
    REG_FMTX_AGC_OVR_VAL0, // 0X000F441C
    REG_FMTX_AGC_OVR_VAL1, // 0X000F4420
    REG_FMTX_AGC_OVR_VAL2, // 0X000F4424
    REG_FMTX_AGC_CTRL, // 0X000F4428
    REG_FMTX_AGC_GMAX0, // 0X000F442C
    REG_FMTX_AGC_GMAX1, // 0X000F4430
    REG_FMTX_AGC_GMAX2, // 0X000F4434
    REG_FMTX_AGC_GMIN0, // 0X000F4438
    REG_FMTX_AGC_GMIN1, // 0X000F443C
    REG_FMTX_AGC_GMIN2, // 0X000F4440
    REG_FMTX_AGC_GDN0, // 0X000F4444
    REG_FMTX_AGC_GDN1, // 0X000F4448
    REG_FMTX_AGC_GDN2, // 0X000F444C
    REG_FMTX_AGC_GUP0, // 0X000F4450
    REG_FMTX_AGC_GUP1, // 0X000F4454
    REG_FMTX_AGC_GUP2, // 0X000F4458
    REG_FMTX_TG_MAGL0, // 0X000F445C
    REG_FMTX_TG_MAGL1, // 0X000F4460
    REG_FMTX_ADCDC_CTRL, // 0X000F4464
    REG_FMTX_CLIP_COEFF0, // 0X000F4468
    REG_FMTX_CLIP_COEFF1, // 0X000F446C
    REG_FMTX_CLIP_COEFF2, // 0X000F4470
    REG_FMTX_CLIP_COEFF3, // 0X000F4474
    REG_FMTX_CLIP_COEFF4, // 0X000F4478
    REG_FMTX_CLIP_COEFF5, // 0X000F447C
    REG_FMTX_CLIP_COEFF6, // 0X000F4480
    REG_FMTX_CLIP_COEFF7, // 0X000F4484
    REG_FMTX_CLIP_COEFF8, // 0X000F4488
    REG_FMTX_CLIP_COEFF9, // 0X000F448C
    REG_FMTX_CLIP_COEFFA, // 0X000F4490
    REG_FMTX_CLIP_COEFFB, // 0X000F4494
    REG_FMTX_CLIP_COEFFC, // 0X000F4498
    REG_FMTX_CLIP_STATUS, // 0X000F449C
    REG_FMTX_COEFFA0, // 0X000F44A0
    REG_FMTX_COEFFA1, // 0X000F44A4
    REG_FMTX_COEFFD0, // 0X000F44A8
    REG_FMTX_COEFFD1, // 0X000F44AC
    REG_FMTX_COEFFD2, // 0X000F44B0
    REG_FMTX_LMR_COEFF0, // 0X000F44B4
    REG_FMTX_LMR_COEFF1, // 0X000F44B8
    REG_FMTX_LPR_COEFF0, // 0X000F44BC
    REG_FMTX_LPR_COEFF1, // 0X000F44C0
    REG_FMTX_MOD_CTRL, // 0X000F44C4
    REG_FMTX_PILOT_AMP0, // 0X000F44C8
    REG_FMTX_PILOT_AMP1, // 0X000F44CC
    REG_FMTX_PILOT_DELTA0, // 0X000F44D0
    REG_FMTX_PILOT_DELTA1, // 0X000F44D4
    REG_FMTX_PREEMP_CLIP0, // 0X000F44D8
    REG_FMTX_PREEMP_CLIP1, // 0X000F44DC
    REG_FMTX_PREEMP_GAIN0, // 0X000F44E0
    REG_FMTX_PREEMP_GAIN1, // 0X000F44E4
    REG_FMTX_RA_CTRL, // 0X000F44E8
    REG_FMTX_RA_FRAC0, // 0X000F44EC
    REG_FMTX_RA_FRAC1, // 0X000F44F0
    REG_FMTX_RA_FRAC2, // 0X000F44F4
    REG_FMTX_RA_HYST, // 0X000F44F8
    REG_FMTX_RA_MINADJ, // 0X000F44FC
    REG_FMTX_FM_MAG0, // 0X000F4500
    REG_FMTX_FM_MAG1, // 0X000F4504
    REG_FMTX_FIF0, // 0X000F4508
    REG_FMTX_FIF1, // 0X000F450C
    REG_FMTX_DELTAF, // 0X000F4510
    REG_FMTX_IDC0, // 0X000F4514
    REG_FMTX_IDC1, // 0X000F4518
    REG_FMTX_QDC0, // 0X000F451C
    REG_FMTX_QDC1, // 0X000F4520
    REG_FMTX_IQCOMP_G0, // 0X000F4524
    REG_FMTX_IQCOMP_G1, // 0X000F4528
    REG_FMTX_IQCOMP_P0, // 0X000F452C
    REG_FMTX_IQCOMP_P1, // 0X000F4530
    REG_FMTX_SCIC3_BW, // 0X000F4534
    REG_FMTX_DSREQ_NOTCHF, // 0X000F4538
    REG_FMTX_CHRP_AFCA0, // 0X000F453C
    REG_FMTX_CHRP_AFCA1, // 0X000F4540
    REG_FMTX_CHRP_AFCB0, // 0X000F4544
    REG_FMTX_CHRP_AFCB1, // 0X000F4548
    REG_FMTX_CHRP_FCA0, // 0X000F454C
    REG_FMTX_CHRP_FCA1, // 0X000F4550
    REG_FMTX_CHRP_FCB0, // 0X000F4554
    REG_FMTX_CHRP_FCB1, // 0X000F4558
    REG_FMTX_CHRP_MRKA0, // 0X000F455C
    REG_FMTX_CHRP_MRKA1, // 0X000F4560
    REG_FMTX_CHRP_MRKB0, // 0X000F4564
    REG_FMTX_CHRP_MRKB1, // 0X000F4568
    REG_FMTX_CHRP_SPCA0, // 0X000F456C
    REG_FMTX_CHRP_SPCA1, // 0X000F4570
    REG_FMTX_CHRP_SPCB0, // 0X000F4574
    REG_FMTX_CHRP_SPCB1, // 0X000F4578
    REG_FMTX_CHRP_CTRL, // 0X000F457C
    REG_FMTX_CHRP_ON, // 0X000F4580
    REG_FMTX_MUTE_SCL, // 0X000F4584
    REG_FMTX_MUTE_SCR, // 0X000F4588
    REG_FMTX_MUTE_CTRL, // 0X000F458C
    REG_FMTX_MUTE_ALPHA, // 0X000F4590
    REG_FMTX_RDS_COEFF0, // 0X000F4594
    REG_FMTX_RDS_COEFF1, // 0X000F4598
    REG_FMTX_RDS_CTRL, // 0X000F459C
    REG_FMTX_RDS_T_INC0, // 0X000F45A0
    REG_FMTX_RDS_T_INC1, // 0X000F45A4
    REG_FMTX_RDS_T_INC2, // 0X000F45A8
    REG_FMTX_CHANL0, // 0X000F45AC
    REG_FMTX_CHANL1, // 0X000F45B0
    REG_FMTX_CHANL_STEP, // 0X000F45B4
    REG_FMTX_PAPU, // 0X000F45B8
    REG_FMTX_REF_XTAL = 0x25C0/4, // 0X000F45C0
    REG_FMTX_LOCK, // 0X000F45C4
    REG_FMTX_PA_CTRL, // 0X000F45C8
    REG_FMTX_LMR_DEV1_VAL1, // 0X000F45CC
    REG_FMTX_DEV, // 0X000F45D0
    REG_FMTX_LPR_DEV0_VAL0, // 0X000F45D4
    REG_FMTX_LPR_DEV0_VAL1, // 0X000F45D8
    REG_FMTX_LPR_DEV1_VAL0, // 0X000F45DC
    REG_FMTX_LPR_DEV1_VAL1, // 0X000F45E0
    REG_FMTX_LPR_DEV2_VAL0, // 0X000F45E4
    REG_FMTX_LPR_DEV2_VAL1, // 0X000F45E8
    REG_FMTX_LPR_DEV3_VAL0, // 0X000F45EC
    REG_FMTX_LPR_DEV3_VAL1, // 0X000F45F0
    REG_FMTX_LMR_DEV0_VAL0, // 0X000F45F4
    REG_FMTX_LMR_DEV0_VAL1, // 0X000F45F8
    REG_FMTX_LMR_DEV1_VAL0, // 0X000F45FC
    REG_FMTX_LMR_DEV2_VAL0, // 0X000F4604
    REG_FMTX_LMR_DEV2_VAL1, // 0X000F4608
    REG_FMTX_LMR_DEV3_VAL0, // 0X000F460C
    REG_FMTX_LMR_DEV3_VAL1, // 0X000F4610
    REG_FMTX_PILOT_DEV0_VAL0, // 0X000F4614
    REG_FMTX_PILOT_DEV0_VAL1, // 0X000F4618
    REG_FMTX_PILOT_DEV1_VAL0, // 0X000F461C
    REG_FMTX_PILOT_DEV1_VAL1, // 0X000F4620
    REG_FMTX_RDS_DEV0_VAL0, // 0X000F4624
    REG_FMTX_RDS_DEV0_VAL1, // 0X000F4628
    REG_FMTX_RDS_DEV1_VAL0, // 0X000F462C
    REG_FMTX_RDS_DEV1_VAL1, // 0X000F4630
    REG_FMTX_RDS_DEV2_VAL0, // 0X000F4634
    REG_FMTX_RDS_DEV2_VAL1, // 0X000F4638
    REG_FMTX_RDS_DEV3_VAL0, // 0X000F463C
    REG_FMTX_RDS_DEV3_VAL1, // 0X000F4640
    REG_FMTX_PREEMPH0_VAL0, // 0X000F4644
    REG_FMTX_PREEMPH0_VAL1, // 0X000F4648
    REG_FMTX_PREEMPH1_VAL0, // 0X000F464C
    REG_FMTX_PREEMPH1_VAL1, // 0X000F4650
    REG_FMTX_PREEMPH2_VAL0, // 0X000F4654
    REG_FMTX_PREEMPH2_VAL1, // 0X000F4658
    REG_FMTX_MPX_LMT, // 0X000F465C
    REG_FMTX_MPX_LMT0_VAL0, // 0X000F4660
    REG_FMTX_MPX_LMT0_VAL1, // 0X000F4664
    REG_FMTX_MPX_LMT1_VAL0, // 0X000F4668
    REG_FMTX_MPX_LMT1_VAL1, // 0X000F466C
    REG_FMTX_MPX_LMT2_VAL0, // 0X000F4670
    REG_FMTX_MPX_LMT2_VAL1, // 0X000F4674
    REG_FMTX_MPX_LMT3_VAL0, // 0X000F4678
    REG_FMTX_MPX_LMT3_VAL1, // 0X000F467C
    REG_FMTX_MPX_CLIPLEV0, // 0X000F4680
    REG_FMTX_MPX_CLIPLEV1, // 0X000F4684
    REG_FMTX_REF_ERR, // 0X000F4688
    REG_FMTX_MAIN_CTRL, // 0X000F468C
    REG_FMTX_RDS_PI0, // 0X000F4690
    REG_FMTX_RDS_PI1, // 0X000F4694
    REG_FMTX_RDS_TYPE, // 0X000F4698
    REG_FMTX_TG_MAGR0, // 0X000F469C
    REG_FMTX_AF, // 0X000F46A0
    REG_FMTX_RDS_DISP, // 0X000F46A4
    REG_FMTX_RDS_MODE, // 0X000F46A8
    REG_FMTX_I2C_PAGE_CTRL, // 0X000F46AC
    REG_FMTX_TG_MAGR1, // 0X000F46B0
    REG_FMTX_RDS_SCROLL, // 0X000F46B4
    REG_FMTX_RDS_LENGTH, // 0X000F46B8
    REG_FMTX_RDS_TOGGLE_AB, // 0X000F46BC
    REG_FMTX_RDS_REP, // 0X000F46C0
    REG_FMTX_RDS_COMMIT, // 0X000F46C4
    REG_FMTX_RDS_CMT_CMPLT, // 0X000F46C8
    REG_FMTX_RDS_DATA_EN, // 0X000F46CC
    REG_FMTX_OVERRIDE, // 0X000F46D0
    REG_FMTX_AP_CTRL, // 0X000F46D4
    REG_FMTX_IRQ_CTRL, // 0X000F46D8
    REG_FMTX_IRQ_MODE0, // 0X000F46DC
    REG_FMTX_IRQ_MODE1, // 0X000F46E0
    REG_FMTX_IRQ_MODE2, // 0X000F46E4
    REG_FMTX_IRQ_MODE3, // 0X000F46E8
    REG_FMTX_IRQ_MASK0, // 0X000F46EC
    REG_FMTX_IRQ_MASK1, // 0X000F46F0
    REG_FMTX_IRQ_MASK0_SHADOW, // 0X000F46F4
    REG_FMTX_IRQ_MASK1_SHADOW, // 0X000F46F8
    REG_FMTX_IRQ_FLAG0, // 0X000F46FC
    REG_FMTX_IRQ_FLAG1, // 0X000F4700
    REG_FMTX_IRQ_FLAG0_SHADOW, // 0X000F4704
    REG_FMTX_IRQ_FLAG1_SHADOW, // 0X000F4708
    REG_FMTX_I2C_WR_MASK0, // 0X000F470C
    REG_FMTX_I2C_WR_MASK1, // 0X000F4710
    REG_FMTX_I2C_WR_STAT0, // 0X000F4714
    REG_FMTX_I2C_WR_STAT1, // 0X000F4718
    REG_FMTX_IRQ_TRIG, // 0X000F471C
    REG_FMTX_IRQ_TRIG_CTRL, // 0X000F4720
    REG_FMTX_RDS_WLINE0, // 0X000F4724
    REG_FMTX_RDS_WLINE1, // 0X000F4728
    REG_FMTX_SPARE0_CTRL, // 0X000F4740
    REG_FMTX_SPARE1_CTRL, // 0X000F4744
    REG_FMTX_SPARE2_CTRL, // 0X000F4748
    REG_FMTX_SPARE3_CTRL, // 0X000F474C
    REG_FMTX_SPARE4_CTRL, // 0X000F4750
    REG_FMTX_SPARE5_CTRL, // 0X000F4754
    REG_FMTX_SPARE6_CTRL, // 0X000F4758
    REG_FMTX_SPARE7_CTRL, // 0X000F475C
    REG_FMTX_TG_STEPL0, // 0X000F4760
    REG_FMTX_TG_STEPL1, // 0X000F4764
    REG_FMTX_TG_STEPR0, // 0X000F4768
    REG_FMTX_TG_STEPR1, // 0X000F476C
    REG_FMTX_MPX_COEF_CTRL, // 0X000F4770
    REG_FMTX_FLL_COEFF0, // 0X000F4778
    REG_FMTX_FLL_COEFF1, // 0X000F477C
    REG_FMTX_FLL_COEFF2, // 0X000F4780
    REG_FMTX_FLL_COEFF3, // 0X000F4784
    REG_FMTX_FLL_REF_TR, // 0X000F4788
    REG_FMTX_TSSI_CTL0, // 0X000F478C
    REG_FMTX_TSSI_CTL1, // 0X000F4790
    REG_FMTX_TSSI_CTL2, // 0X000F4794
    REG_FMTX_TSSI_CTL3, // 0X000F4798
    REG_FMTX_TSSI_CTL4, // 0X000F479C
    REG_FMTX_TSSI_CTL5, // 0X000F47A0
    REG_FMTX_PU_OVR, // 0X000F47A4
    REG_FMTX_PU_OVR_VAL, // 0X000F47A8
    REG_FMTX_BDAC_IBP0, // 0X000F47AC
    REG_FMTX_BDAC_IBP1, // 0X000F47B0
    REG_FMTX_BDAC_QBP0, // 0X000F47B4
    REG_FMTX_BDAC_QBP1, // 0X000F47B8
    REG_FMTX_BDAC_PRB, // 0X000F47BC
    REG_FMTX_CLK_DAC_SEL, // 0X000F47C0
    REG_FMTX_CONT_PA, // 0X000F47C4
    REG_FMTX_G_PA_1DB, // 0X000F47C8
    REG_FMTX_G_PA_6DB, // 0X000F47CC
    REG_FMTX_PA_CMBIAS_TUNE, // 0X000F47D0
    REG_FMTX_DAC_IBASE_ITRIM, // 0X000F47D4
    REG_FMTX_RCTC_RCAL, // 0X000F47D8
    REG_FMTX_TSSI_BIAS, // 0X000F47DC
    REG_FMTX_ANA_OVR, // 0X000F47E0
    REG_FMTX_ANA_OVR_VAL, // 0X000F47E4
    REG_FMTX_ANA_VADC_PUP_FAST, // 0X000F47E8
    REG_FMTX_VADC_OUT, // 0X000F47EC
    REG_FMTX_ANA_CTL0, // 0X000F47F0
    REG_FMTX_ANA_CTL1, // 0X000F47F4
    REG_FMTX_ANA_CTL2, // 0X000F47F8
    REG_FM_COUNT
};

struct Fm : Peripheral<REG_FM_COUNT>
{
    /// Constructor
    Fm(sc_core::sc_module_name name)
    : Peripheral<REG_FM_COUNT>(name)
    {
        // initialize the registers content
    }

private:
    /** Register read function
     * @param[in] offset Offset of the register to read
     * @return The value read
     */
    uint32_t
    reg_rd(uint32_t offset);

    /** Register write function
     * @param[in] offset Offset of the register to read
     * @param[in] offset Value to write in the register
     */
    void
    reg_wr(uint32_t offset, uint32_t value);

};

#endif /*FM_H_*/
